#ifndef WEEK3_H
#define WEEK3_H

//void backtrack(int a[], int k, int n,std::ofstream& os);
namespace generateSubsets{
	void generate_subsets(int n,std::ofstream& os);
	bool is_a_solution(int a[], int k ,int n);
	void process_solution(int a[], int k,std::ofstream& os);
	void construct_candidates(int a[], int k ,int n,int c[],int *ncandidates);
	void make_move(int a[], int k ,int n);
	void unmake_move(int a[], int k ,int n);
	void backtrack(int a[], int k, int n,std::ofstream& os);


	static int const MAXCANDIDATES=2;
	extern int num;
	extern bool finished;

}

namespace generatePermutations{
	void generate_permutations(int n,std::ofstream& os);
	bool is_a_solution(int a[], int k ,int n);
	void process_solution(int a[], int k,std::ofstream& os);
	void construct_candidates(int a[], int k ,int n,int c[],int *ncandidates);
	void make_move(int a[], int k ,int n);
	void unmake_move(int a[], int k ,int n);
	void backtrack(int a[], int k, int n,std::ofstream& os);

	static int const MAXCANDIDATES=2;
	extern int num;
	extern bool finished;

}
#endif